package responsibilitychain;

/** 职责链设计模式
 * @author chenyuan
 * @date 2020/10/30 16:30
 */
public class Client {
    public static void main(String[] args) {
        // 创建一个请求
        PurchaseRequest request = new PurchaseRequest(1, -310, 1);

        // 创建相关的审批人
        DepartmentApprover departmentApprover = new DepartmentApprover("系主任");
        CollageApprover collageApprover = new CollageApprover("院长");
        ViceSchoolMasterApprover viceSchoolMasterApprover = new ViceSchoolMasterApprover("副校长");
        SchoolMasterApprover schoolMasterApprover = new SchoolMasterApprover("校长");
        FailureApprover failureApprover = new FailureApprover("失败情况处理者");

        // 将各个审批级别的下一级设置好
        departmentApprover.setApprover(collageApprover);
        collageApprover.setApprover(viceSchoolMasterApprover);
        viceSchoolMasterApprover.setApprover(schoolMasterApprover);
        // 因为第一个执行的处理者不一定是处理金额最小的系主任，有可能是处理金额最大的校长
        // 如果请求的金额是 1000，但又恰好第一个执行的人是校长，这样就会空指针异常
        // 所以需要处理者需要构成环状
        // 正因为处理者构成了环状，如果没有一个专门处理错误的处理者，就会构成死循环
        schoolMasterApprover.setApprover(failureApprover);
        failureApprover.setApprover(departmentApprover);

        // 让第一个处理者执行请求
        schoolMasterApprover.processRequest(request);
    }
}
